import axios from 'axios';

const service = axios.create({
  timeout: 30000, // 30秒超时时间
  baseURL: '/api'
});

service.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';

/**
 * 请求拦截
 * 用于处理在请求需要做的操作
 */
// let loading = null;
service.interceptors.request.use(
  config => {
    // 在请求前展示加载框
    // loading = Loading.service({text:'正在加载中'});
    // const token = localStorage.getItem('token');
    const token = sessionStorage.getItem('token');
    if (token) {
      // config.headers['Authorization'] = token;
      config.headers.Authorization = token;
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

/**
 * 请求响应拦截
 * 用于处理返回需要做的操作
 */
service.interceptors.response.use(
  response => {
    // 请求响应后关闭加载框
    // if(loading){
    //     loading.close();
    // }
    const responseCode = response.status;
    // 如果返回200表示正常,可以正常拿到数据，否则跑出异常
    if (responseCode === 200) {
      if (response.data.status === '120001') {
        // 清除sessionStorage
        sessionStorage.clear();
      } else {
        return Promise.resolve(response);
      }
    } else {
      return Promise.reject(response);
    }
  },
  error => {
    // 请求响应后关闭加载框
    // if(loading){
    //     loading.close();
    // }
    // 对重复调用接口不用信息提示处理
    const url = error.config.url;
    if (url.indexOf('/config/getConfig') >= 0) {
      return Promise.reject(error);
    }
    // 断网或者请求超时
    if (!error.response) {
      console.log('TIMEOUT')
      // 请求超时状态
      if (error.message.indexOf('timeout')) {

      } else {
        // 可以展示断网组件

      }
      return;
    }
    // 服务器返回不是 2 开头的情况，会进入这个回调
    // 可以根据后端返回的状态码进行不同的操作
    const responseCode = error.response.status;
    return Promise.reject(error);
  }
);

/**
 * 封装 post和get 请求
 */
export default {
  get: (url, data, isBlob) => {
    data = data || {};
    const res = service.request({
      method: 'get',
      url: url,
      params: data,
      responseType: isBlob ? 'blob' : 'json'
    });
    return res;
  },
  post: (url, data, headers, isBlob) => {
    data = data || {};
    const res = service.request({
      method: 'post',
      url,
      data,
      headers,
      responseType: isBlob ? 'blob' : 'json'
    });
    return res;
  }
};

/**
 * 封装图片上传
 */
export const uploadFile = formData => {
  const res = service.request({
    method: 'post',
    url: '/upload',
    data: formData,
    headers: {'Content-Type': 'multipart/form-data'}
  });
  return res;
};
